package com.wb3.meta.common.pojo;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class Result {

    private final static String SUCCESS_FLAG = "1"; //成功标识
    private final static String ERROR_FLAG = "0"; //失败标识
    private final static String SUCCESS_MSG = "SUCCESS"; //成功msg
    private final static String ERROR_MSG = "ERROR"; //成功标识
    private static Map<String, String> mapResult = new HashMap<>();


    /**
     * 构造返回map
     *
     * @param code
     * @param msg
     * @param data
     * @return
     */
    private static Map<String, String> instance(String code, String msg, Object data) {
        mapResult.put("code", code);
        mapResult.put("msg", msg);
        mapResult.put("data", changeObject2String(data));
        return mapResult;
    }

    /**
     * 默认成功方法，不带data参数
     *
     * @return
     */
    public static Map<String, String> success() {
        return instance(SUCCESS_FLAG, SUCCESS_MSG, null);
    }


    /**
     * 默认成功方法，增加msg，data传参
     *
     * @param msg
     * @param data
     * @return
     */
    public static Map<String, String> success(String msg, Object data) {

        return instance(SUCCESS_FLAG, msg, data);
    }

    /**
     * 默认成功方法-增加data传参
     *
     * @param data
     * @return
     */
    public static Map<String, String> success(Object data) {

        return instance(SUCCESS_FLAG, SUCCESS_MSG, data);
    }

    /**
     * 默认失败方法，不带data参数
     *
     * @return
     */
    public static Map<String, String> fail() {
        return instance(ERROR_FLAG, ERROR_MSG, null);
    }


    /**
     * 默认失败方法，增加msg，data传参
     *
     * @param msg
     * @param data
     * @return
     */
    public static Map<String, String> fail(String msg, Object data) {

        return instance(ERROR_FLAG, msg, data);
    }

    /**
     * 默认失败方法，增加msg，data传参
     * @param code
     * @param msg
     * @param data
     * @return
     */
    public static Map<String, String> fail(String code ,String msg, Object data) {

        return instance(code, msg, data);
    }


    /**
     * 默认失败方法-增加data传参
     *
     * @param data
     * @return
     */
    public static Map<String, String> fail(Object data) {
        return instance(ERROR_FLAG, ERROR_MSG, data);
    }


    /**
     * 如果传递过来的data是对象，则转成json字符串
     *
     * @param data
     * @return
     */
    private static String changeObject2String(Object data) {
        String d = "";
        if (data instanceof String) {
            d = data.toString();
        } else if (data instanceof List) {
            d = JSONArray.toJSONString(data);
        } else {
            d = JSONObject.toJSONString(data);
        }
        return d;
    }
}
